package com.github.xtranslation.core.annotation;


import com.github.xtranslation.core.repository.TransRepository;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * Translation: 数据翻译注解
 * <p>
 * 该注解用于标记需要进行数据翻译的字段，可以将字段的键值翻译为可读的文本信息。
 * </p>
 *
 * @author zhangxiaoxiang
 * @since 2025/7/27
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface Trans {

    /**
     * transKey属性名常量
     * <p>
     * 用于在组合注解中通过反射获取transKey属性值
     */
    String TRANS_KEY_ATTR = "transKey";

    /**
     * transField属性名常量
     * <p>
     * 用于在组合注解中通过反射获取transField属性值
     */
    String TRANS_FIELD_ATTR = "transField";

    /**
     * @return 待翻译数据的键字段名(例如:部门表主键字段deptId)
     * <p>
     * 指定包含原始键值的字段名称，该字段的值将用于在翻译仓库中查找对应的翻译值
     */
    String transKey() default "";

    /**
     * @return 待翻译字段对应的目标字段名(例如:部门名称deptName)
     * <p>
     * 指定从翻译仓库中提取的目标字段名称，用于填充当前注解标记的字段
     */
    String transField() default "";

    /**
     * @return 翻译仓库实现类（必须指定）
     * <p>
     * 指定用于获取翻译数据的仓库实现类，必须实现TransRepository接口。
     * 此属性无默认值，使用者必须根据实际需求指定具体的仓库实现类。
     */
    Class<? extends TransRepository> repository();


}
